
import java.util.Scanner;

public class test {
    //获取一个数二进制序列中所有的偶数位和奇数位， 分别输出二进制序列。

    public static void printfone(int n){
        System.out.println("打印偶数位");
        for (int i = 31; i >= 0; i -= 2) {
            System.out.print(((n >> i) & 1)+" ");
        }
        System.out.println();
        System.out.println("打印奇数位");
        for (int i = 30; i >= 0; i -= 2) {
            System.out.print(((n >> i) & 1)+" ");
        }
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数");
        int n = sc.nextInt();
        printfone(n);
    }







    //写一个函数返回参数二进制中 1 的个数 比如： 15 0000 1111 4 个 1
//    方法二
    public static int numOfOne2(int n) {
        int count = 0;
        while (n != 0){
            count++;
            n = n & (n - 1);
        }
        return count;
    }
        public static void main4(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入一个整数");
            int n = sc.nextInt();
            System.out.println("方法二");
            System.out.println("它二进制位有"+numOfOne2(n)+"个1");
        }





//    public static int numOfOne(int n) {
//        int count = 0;
//        while (n != 0){
//            count++;
//            n=n>>>1;
//        }
//        return count;
//    }
//    public static void main4(String[] args) {
//        Scanner sc = new Scanner(System.in);
//        System.out.println("请输入一个整数");
//        int n = sc.nextInt();
//        System.out.println("方法一");
//        System.out.println("它二进制位有"+numOfOne(n)+"个1");
//    }








    //求最大公约数
    public static void main3(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入第一个数");
        int a= sc.nextInt();
        System.out.println("请输入第二个数");
        int b= sc.nextInt();
        int n=a,m=b;
        if(n<m){
            int t=n;
            n=m;
            m=t;
        }
        while(n>=m){
            int r=n%m;
            if(r==0){
                System.out.println(a+"和"+b+"最大公约数为"+m);
                break;
            }
            else{
                n=m;
                m=r;
            }
        }
    }









    //求水仙花数 0~999999 六位数的水仙花树
    public static void findNum(int n) {
        for (int i = 1; i <= n; i++) {
            int tmp = i;
            int count = 0;//位数
            int sum = 0;
            while(tmp != 0){ //这里不用i是因为如果用 while结束循环时i的值就是0 i就一直加不上去了 所以我们用tmp来代替i的值
                count++;
                tmp /= 10;
            }
            tmp = i;
            while(tmp != 0){
                //int sum = Math.pow(tmp%10,count);这样写会报错 因为pow返回的类型是double类型 然而我们用int类型去接收
                //也不能用^ 在java中它不是指数 ^是按位异或
                sum += Math.pow(tmp%10,count);//这样不会报错 因为在java中+=这类复合运算 会自动的帮你装换类型
                tmp /= 10;
            }
            if(i == sum){
                System.out.println(i);
            }
        }
    }
    public static void main2(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        findNum(n);
    }










    //编写代码模拟三次密码输入的场景。
    public static void main1(String[] args) {
        System.out.println("请输入密码:");
        String password="123456";//密码
        int flag=3;
        Scanner sc=new Scanner(System.in);
        while(flag>0){
            String pass= sc.nextLine();//输入的密码
            //字符串之间不能直接比较大小 得用equals()函数来比较  pass==password 错误
            if(password.equals(pass)){
                System.out.println("登录成功");
                break;
            }
            else {
                flag--;
                System.out.println("密码错误\n请重新输入(你还有"+flag+"次机会)");
            }
        }
        if(flag==0){
            System.out.println("登录失败");
        }

    }

}
